﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Configuration;
using Libreria.RFID.Negocio;
using Libreria.RFID.Modelo;

/// <summary>
/// Descripción breve de WebServiceRFID
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente. 
// [System.Web.Script.Services.ScriptService]
public class WebServiceRFID : System.Web.Services.WebService
{

    public WebServiceRFID()
    {

        //Eliminar la marca de comentario de la línea siguiente si utiliza los componentes diseñados 
        //InitializeComponent(); 
    }

    [WebMethod]
    public string HelloWorld()
    {
        return "Hola a todos";
    }

    [WebMethod]
    public List<String[]> ConsultarPersonasPorPerfil(Int32 perfil)
    {
        String CadenaDeConexion = ConfigurationManager.ConnectionStrings["RFID"].ConnectionString;
        PersonaNegocio personas = new PersonaNegocio();
        List<String[]> personasAretornar = new List<string[]>();
        foreach (Persona persona in personas.consultarPersonas(CadenaDeConexion))
        {
            PerfilesDeUsuarioNegocio perfilDePersona = new PerfilesDeUsuarioNegocio();
            List<PerfilesDeUsuario> p = perfilDePersona.consultarPerfilesDeUsuario(persona.Codigo.Value, CadenaDeConexion);
            if (p.Count() > 0)
            {
                if (perfil > 0)
                {
                    if ( p.Any(pf => pf.Perfil.Equals(perfil)) )
                    {
                        String[] personaVector = new String[2];
                        personaVector[0] = persona.Codigo.Value.ToString();
                        personaVector[1] = persona.Apellido + ", " + persona.Nombre;
                        personasAretornar.Add(personaVector);
                    }
                }
                else
                {
                    String[] personaVector = new String[2];
                    personaVector[0] = persona.Codigo.Value.ToString();
                    personaVector[1] = persona.Apellido + ", " + persona.Nombre;
                    personasAretornar.Add(personaVector);
                }
            }
        }
        return personasAretornar;
    }

    [WebMethod]
    public List<Persona> ConsultarPersonasConPerfil(Int32 perfil)
    {
        String CadenaDeConexion = ConfigurationManager.ConnectionStrings["RFID"].ConnectionString;

        PersonaNegocio personas = new PersonaNegocio();
        PerfilesDeUsuarioNegocio perfilDePersona = new PerfilesDeUsuarioNegocio();
        List<Persona> personasAretornar = new List<Persona>();

        if (perfil > 0)
        {
            List<PerfilesDeUsuario> personasConPerfil = perfilDePersona.consultarUsuariosDePerfil(perfil, CadenaDeConexion);

            if (personasConPerfil.Count > 0) {
            List<String> codigos = new List<string>();
                
            codigos.AddRange(from p in personasConPerfil select p.Persona.Value.ToString());

            personasAretornar.AddRange(from item in personas.consultarPersonas(CadenaDeConexion) where codigos.IndexOf(item.Codigo.Value.ToString()) != -1 select item);
                }
        }
        else
        {
            personasAretornar = personas.consultarPersonas(CadenaDeConexion);
        }

        return personasAretornar;
    }

    [WebMethod]
    public List<String[]> ListaDePerfiles()
    {
        String CadenaDeConexion = ConfigurationManager.ConnectionStrings["RFID"].ConnectionString;
        List<String[]> perfiles = new List<string[]>();
        PerfilNegocio perfilesABuscar = new PerfilNegocio();
        foreach (Perfil perfil in perfilesABuscar.consultarPerfiles(CadenaDeConexion))
        {
            String[] perfilARetornar = new String[2];
            perfilARetornar[0] = perfil.Codigo.Value.ToString();
            perfilARetornar[1] = perfil.Nombre;
            perfiles.Add(perfilARetornar);
        }
        return perfiles;
    }

    [WebMethod]
    public Int32 PerfilDeUsuario(Int32 persona)
    {
        String CadenaDeConexion = ConfigurationManager.ConnectionStrings["RFID"].ConnectionString;
        PerfilesDeUsuarioNegocio perfilDePersona = new PerfilesDeUsuarioNegocio();
        List<PerfilesDeUsuario> p = perfilDePersona.consultarPerfilesDeUsuario(persona, CadenaDeConexion);
        Int32 perfil = 0;
        if (p.Count() > 0)
        {
            perfil = ((PerfilesDeUsuario)p[0]).Perfil.Value;
        }
        return perfil;
    }

    [WebMethod]
    public Int32[] inicioDeSesion(String nombre, String clave)
    {
        Int32[] retorno = new Int32[2];
        String CadenaDeConexion = ConfigurationManager.ConnectionStrings["RFID"].ConnectionString;
        UsuarioNegocio usuario = new UsuarioNegocio();
        Usuario sesion = usuario.consultarInicioDeSesion(nombre, clave, CadenaDeConexion);
        if (sesion.Codigo != null)
        {
            retorno[0] = sesion.Codigo.Value;
            PerfilesDeUsuarioNegocio perfilDePersona = new PerfilesDeUsuarioNegocio();
            List<PerfilesDeUsuario> p = perfilDePersona.consultarPerfilesDeUsuario(sesion.Codigo.Value, CadenaDeConexion);
            if (p.Count() > 0)
            {
                retorno[1] = ((PerfilesDeUsuario)p[0]).Perfil.Value;
            }
        }
        return retorno;
    }

    [WebMethod]
    public List<Persona> personas()
    {
        String CadenaDeConexion = ConfigurationManager.ConnectionStrings["RFID"].ConnectionString;
        PersonaNegocio retorno = new PersonaNegocio();
        return retorno.consultarPersonas(CadenaDeConexion);
    }

    [WebMethod]
    public Persona persona(Int32 codigoPersona)
    {
        String CadenaDeConexion = ConfigurationManager.ConnectionStrings["RFID"].ConnectionString;
        PersonaNegocio retorno = new PersonaNegocio();
        Persona persona = retorno.consultarPersonasPorCodigo(codigoPersona, CadenaDeConexion);
        return persona;
    }
    

}

